/**
 * 获取某天的 00:00:00
 * @param {Date} date
 * @returns {Date}
 */
export function getStartOfDay(date) {
  const d = new Date(date);
  d.setHours(0, 0, 0, 0);
  return d;
}

/**
 * 获取某天的 23:59:59
 * @param {Date} date
 * @returns {Date}
 */
export function getEndOfDay(date) {
  const d = new Date(date);
  d.setHours(23, 59, 59, 999);
  return d;
}

/**
 * 格式化为 YYYY-MM-DD HH:mm:ss
 * @param {Date} date
 * @returns {string}
 */
export function formatDateToYYYYMMDD(date) {
  const d = new Date(date);
  const year = d.getFullYear();
  const month = String(d.getMonth() + 1).padStart(2, '0');
  const day = String(d.getDate()).padStart(2, '0');
  const hour = String(d.getHours()).padStart(2, '0');
  const minute = String(d.getMinutes()).padStart(2, '0');
  const second = String(d.getSeconds()).padStart(2, '0');
  return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}

/**
 * 返回时间戳
 * @param {Date} date
 * @returns {number}
 */
export function getTimestamp(date) {
  return new Date(date).getTime();
}

/**
 * 判断两个日期是否为同一天
 * @param {Date} date1
 * @param {Date} date2
 * @returns {boolean}
 */
export function isSameDay(date1, date2) {
  const d1 = new Date(date1);
  const d2 = new Date(date2);
  return (
    d1.getFullYear() === d2.getFullYear() &&
    d1.getMonth() === d2.getMonth() &&
    d1.getDate() === d2.getDate()
  );
}
// date.js
/**
 * 格式化日期为指定格式字符串
 * @param {Date} date - 需要格式化的日期对象
 * @param {string} fmt - 格式字符串，例如 "yyyy-MM-dd hh:mm:ss"
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, fmt) {
  if (/(y+)/.test(fmt)) {
    const match = RegExp.$1;
    fmt = fmt.replace(match, (date.getFullYear() + '').substr(4 - match.length));
  }

  const formatMap = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  };

  for (const pattern in formatMap) {
    if (new RegExp(`(${pattern})`).test(fmt)) {
      const match = RegExp.$1;
      const value = formatMap[pattern] + '';
      fmt = fmt.replace(match, match.length === 1 ? value : padLeftZero(value));
    }
  }

  return fmt;
}

/**
 * 左侧补零，确保字符串长度为2
 * @param {string} str - 需要补零的字符串
 * @returns {string} 补零后的字符串
 */
function padLeftZero(str) {
  return ('00' + str).slice(-2);
}

/**
 * 格式化日期字符串为中文日期时间格式
 * @param {string|Date} dateString - 可以解析为 Date 的字符串或对象
 * @returns {string} 形如 "2025年07月22日 14时05分09秒"
 */
export function formattedDateTime(dateString) {
  const date = new Date(dateString);
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  return `${year}年${month}月${day}日 ${hours}时${minutes}分${seconds}秒`;
}


/**
 * 日期选择器快捷项配置
 * 用于 <el-date-picker type="daterange" /> 的 shortcuts
 */
export const datePickerShortcuts = {
  shortcuts: [{
    text: '最近一周',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
      picker.$emit('pick', [start, end]);
    }
  }, {
    text: '最近一个月',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
      picker.$emit('pick', [start, end]);
    }
  }, {
    text: '最近三个月',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
      picker.$emit('pick', [start, end]);
    }
  }]
};
